- "Nuevo proyecto: voy instalando paquetes segĂşn voy necesitando."
19 de Octubre de 2017
Desarrollo en mi equipo con windows pero el servidor es Linux
….y la excusa favorita……
De gran tamaño, es muy complicado mover de un sitio a otro y además tienen requerimientos de computación exagerados. Es necesaria mucha memoria y CPU.
Usamos máquinas virtuales
Guardamos Imágenes del disco
Mismo problema que las máquinas virtuales pero magnificado. Las plantillas se quedan obsoletas y hay que actualizarlas cada cierto tiempo.
Usamos máquinas virtuales
Guardamos Imágenes del disco
Lo documentamos TODO.
Algunos paquetes o el mismo Rstudio intentan paliar el problema:
Packrat. Se activa en Rstudio por cada proyecto.
checkpoint. Paquete que fija el resto de paquetes a una versiĂłn.
minicran. crea un repo cran miniatura local con nuestros paquetes.
Seguimos sin solucionar el problema. Tenemos que hacer instalaciĂłn manual.
"Docker es un proyecto de cĂłdigo abierto que automatiza el despliegue de aplicaciones dentro de contenedores de software, proporcionando una capa adicional de abstracciĂłn y automatizaciĂłn de VirtualizaciĂłn a nivel de sistema operativo en Linux.
"Lo bueno de la máquina virtual sin lo malo de la máquina virtual, aprovechando toda la potencia de linux. Sólo se virtualiza lo que se necesita. Del resto se encarga el sistema anfitrión".
Si. Se puede usar en Windows cumpliendo ciertos requisitos.
En Mac OS, Yosemite 10.10.3 o superior. - procesadores 64 Bits, - 4 GB RAM minimo.
Siempre recomendable usar Linux (no solo para Docker, sino en general)
No dependen del hardware ni del sistema operativo host.
Permiten mover de manera muy rápida y fácilmente el software de una máquina a otra.
Su uso es relativamente sencillo. Basta conocer 5 ó 6 comandos y unas nociones muy básicas. Luego si queremos podemos profundizar.
Cada vez más usado, nos permite acceder a muchĂsima documentaciĂłn o ayuda de manera sencilla. Además hay imágenes para casi todo lo que nos imaginemos.
Es la parte activa con la que interactuamos. "Hace cosas".
La plantilla en la que se basa el contenedor para saber lo que tiene que hacer.
Repositorio en el cual de manera abierta se ponen a disposición las imágenes. Uno de los más conocidos y usados es "Docker Hub".
Es la "receta" para construir una imagen desde cero. Si conocéis Puppet o Chef se trata de un concepto similar. Un archivo de texto con instrucciones paso a paso para construir una imagen.
Entre otras muchas cosas.
Existen imagenes para levantar un contenedor linux que solo ocupa 5 MB (alpine), "todas"" las distribuciones Linux (Ubuntu , CentOS, Debian), No Sql (Redis, MongoDB, Cassandra), Si Sql (Mysql, postgreSQL)…..
Muchas de las imagenes son "oficiales" de los propios desarrolladores
Carl Boettiger (knitcitations, EML, RNeXML….)
Dirk Eddelbuettel (Rcpp, RcppArmadillo, RcppEigen, digest…)
mantienen Rocker, un repositorio muy completo con diferentes versiones de R.
En github:
https://github.com/rocker-org/rocker
En Docker Hub:
Obtener una imagen
docker pull rocker/rstudio
Generar un contenedor a partir de la imagen
docker run --rm -it p 8787:8787 rocker/rstudio
Conectar con Rocker
localhost:8787
Los volĂşmenes son puntos de montaje que asociamos a un contenedor. Mapeados contra un directorio de nuestro sistema anfitriĂłn nos permite tener acceso a su contenido.
En windows
docker run --rm -it p 8787:8787 -v \ C://Users/miusuario/Documents/Docker:/srv/shiny-server 6dc473697f85
En Linux (más fácil, por supuesto)
docker run --rm -it p 8787:8787 -v /home/data:/data 6dc473697f85
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE rocker/shiny latest 682eb5fda1f3 12 days ago 1.23 GB trescuatrodos latest fbac184a48f6 2 weeks ago 4.52 GB trescuatro latest 7781ee1f031f 2 weeks ago 4.5 GB jvera/tidyviz latest 3930c226a472 2 weeks ago 4.54 GB rocker/ropensci latest 8bf0948db340 2 weeks ago 3.46 GB rocker/tidyverse latest 83f91871d62f 3 weeks ago 1.56 GB ubuntu latest f7b3f317ec73 4 weeks ago 117 MB rocker/rstudio latest a3f43bf49425 2 months ago 990 MB hello-world latest 48b5124b2768 4 months ago 1.84 kB d4w/nsenter latest 9e4f13a0901e 8 months ago 83.8 kB
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fa049d375a71 ubuntu "/init" 7 s. ago Up 5 s. 3838/tcp, 0.0.0.0:8787->8787/tcp \ pensive_meninsky
(nos muestra también los contenedores parados)
docker -name
docker run -d -p 8787:8787 -name rockandroll -v /home/data:/data 6dc473697f8
¡Cuidado!
Si no se guardan los cambios el contenedor vuelve al estado inicial. Pero…
Es el mejor método para guardar los cambios de nuestro contenedor y compartirlo.
FROM rocker/rstudio:latest
RUN apt-get update -qq && apt-get -y --no-install-recommends install \
libxml2-dev \
libcairo2-dev \
libpq-dev \
libudunits2-dev \
&& . /etc/environment \
&& install2.r --error \
devtools tidyverse ggplot2 profvis formatR \
remotes rio validate MASS magrittr
RUN Rscript -e 'devtools::install_github("smach/rmiscutils")'
RUN rm -rf /tmp/downloaded_packages/
¿qué ocurre si queremos compartir nuestro entorno sin tener que componer un Dockerfile desde cero?
http://o2r.info/2017/05/30/containerit-package/
Podemos generar un Dockerfile con nuestras sesiones de trabajo.
devtools::install_github("r-hub/sysreqs")
devtools::install_github("o2r-project/containerit")
library(containerit)
dockerfile_object <- dockerfile()
print(dockerfile_object)
FROM rocker/r-ver:3.4.0
LABEL maintainer="jvera"
RUN export DEBIAN_FRONTEND=noninteractive; apt-get -y update \
&& apt-get install -y libcurl4-openssl-dev \
libpq-dev \
libssl-dev \
make \
pandoc \
pandoc-citeproc \
zlib1g-dev
RUN ["install2.r", "-r 'https://cloud.r-project.org'", "anytime", "Hmisc", "ggplot2", "Formula", "survival", "lattice", "RPostgreSQL", "DBI", "plyr", "tidyr", "pathological", "magrittr", "rio", "dplyr", "tibble", "pacman", "Rcpp", "assertive.properties", "assertive.types", "assertthat", "digest", "R6", "cellranger", "futile.options", "backports", "acepack", "RApiDatetime", "httr", "assertive.strings", "rlang", "lazyeval", "curl", "readxl", "data.table", "rpart", "Matrix", "checkmate", "devtools", "stringr", "foreign", "htmlwidgets", "munsell", "base64enc", "htmltools", "nnet", "gridExtra", "htmlTable", "codetools", "withr", "assertive.base", "gtable", "git2r", "scales", "stringi", "latticeExtra", "assertive.reflection", "futile.logger", "openxlsx", "lambda.r", "RColorBrewer", "assertive.numbers", "colorspace", "cluster", "assertive.files", "memoise", "knitr", "haven", "remotes"]
RUN ["installGithub.r", "krlmlr/here@efd50cb", "krlmlr/rprojroot@6d1069c"]
WORKDIR /payload/
CMD ["R"]
liftr: paquete R que permite levantar un contenedor con el entorno definido para un reporting automatizado
Machine: Despliegue rápido de motores de Docker en cloud/local.
Swarm: clusters de contenedores. Varios motores docker como uno solo.
Compose: aplicaciones multicontenedor.
Kubernetes: OrquestaciĂłn
CoreOS: Sistema operativo dedicado para aplicaciones basadas en contenedores
https://github.com/veggiemonk/awesome-docker
http://o2r.info/2016/12/15/investigating-docker-and-R/
https://cran.r-project.org/web/packages/liftr/vignettes/liftr-intro.html
http://seankross.com/2017/09/17/Enough-Docker-to-be-Dangerous.html
appsecco/data-science-toolbox
kaggle/rstats
kaggle/julia
kaggle/python
/r/rocker/ropensci/
Jupyter: https://www.dataquest.io/blog/docker-data-science/
https://thehftguy.com/2016/11/01/docker-in-production-an-history-of-failure/
Twitter: @verajosemanuel
DockerHub: https://hub.docker.com/u/jvera/
Blogdown: http://jvera.rbind.io